/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package 学习.下.代码块;
/**
 * @description 代码块 （初始化块）
 *      作用 ： 用于初始化当前类或者类的对象
 *      有修饰只能用static 分为静态与非静态
 *          静态   ：可以有输出语句 只随类的加载而执行一次
 *          非静态  ：可以有输出语句 随着对象的创建而执行 且每创建就执行一次 不能用非静态代码块
 *      可以有多个 按顺序执行
 *      结构 ：可以输出 可以赋值
 *
 *
 *      对属性赋值的位置：
 *          默认 显式 构造器 通过对象.属性、方法 代码块中赋值
 * @author 俊昭
 * @date 2022/4/5
*/

public class CodeBlockTest {
    public static void main(String[] args) {
        // 静态的可以执行 随类加载的时候而执行
        String desc = Person.description;

        // 非静态的的可以执行 随着对象的创建而调用

        Person p1 = new Person();
        Person p2 = new Person();

        // 只会执行一次
        Person.info();
        /*
         静态代码块
        非静态代码块
        非静态代码块
        我是一个快乐的人
        */
        // 属性被赋值了
        System.out.println(p1.age);


    }
}
class Person{
    // 属性
    String name;
    int age;
    static String description="我是一个人";

    // 构造器
    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 代码块
    static{
        System.out.println("静态代码块");
//        info();
    }

    {
        System.out.println("非静态代码块");
        age = 1;
    }

    // 方法
    public void eat(){
        System.out.println("吃东西");
    }

    @Override
    public String toString() {
        return "Person[name=" + name + ",age=" + age + "]";
    }
    public static void info(){
        System.out.println("我是一个快乐的人");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getDescription() {
        return description;
    }

    public static void setDescription(String description) {
        Person.description = description;
    }
}
